package com.itheima.api.pms;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.mapper.pms.PmsProductAttributeCategoryMapper;
import com.itheima.mapper.pms.PmsProductAttributeMapper;
import com.itheima.vo.domain.AjaxResult;
import com.itheima.vo.domain.TableDataInfo;
import com.itheima.vo.dto.pms.PmsProductAttributeCategoryDto;
import com.itheima.vo.pojo.PmsProductAttribute;
import com.itheima.vo.pojo.PmsProductAttributeCategory;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.List;

@DubboService
public class PmsProductAttributeCategoryServiceImpl extends ServiceImpl<PmsProductAttributeCategoryMapper, PmsProductAttributeCategory> implements PmsProductAttributeCategoryService {

    @Autowired
    private PmsProductAttributeCategoryMapper pmsProductAttributeCategoryMapper;

    @Autowired
    private PmsProductAttributeMapper pmsProductAttributeMapper;

    /**
     * 1.添加商品属性分类
     *
     * @param name
     * @return
     */
    @Override
    public AjaxResult createByName(String name) {
        PmsProductAttributeCategory pmsProductAttributeCategory = new PmsProductAttributeCategory();
        pmsProductAttributeCategory.setName(name);
        boolean save = save(pmsProductAttributeCategory);
        return AjaxResult.success("添加成功");
    }

    /**
     * 2.删除单个商品属性分类
     *
     * @param id
     * @return
     */
    @Override
    public AjaxResult deleteById(Long id) {
        boolean res = removeById(id);
        return AjaxResult.success("删除成功");
    }


    /**
     * 3.分页获取所有商品属性分类
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    @Override
    public AjaxResult findByList(Integer pageNum, Integer pageSize) {
        //构建分页查询对象
        Page<PmsProductAttributeCategory> pmsPage = new Page<>(pageNum, pageSize);
        Page<PmsProductAttributeCategory> page1 = page(pmsPage);
        //封装查询对象
        TableDataInfo tInfo = new TableDataInfo();
        tInfo.setList(page1.getRecords());
        tInfo.setPageNum(pageNum);
        tInfo.setPageSize(pageSize);
        tInfo.setTotal(page1.getTotal());
        tInfo.setTotalPage(page1.getPages());

        return AjaxResult.success(tInfo);
    }


    /**
     * 4.获取所有商品属性分类及其下属性
     *
     * @return
     */
    @Override
    public AjaxResult findByListwithAttr() {
        //构建返回的对象集合,用来存入Dto
        ArrayList<PmsProductAttributeCategoryDto> pacDtos = new ArrayList<>();
        //获取所有商品属性,所有pac的集合,
        List<PmsProductAttributeCategory> pacList = pmsProductAttributeCategoryMapper.selectList(null);
        // 遍历集合,单独对集合的每个pac进行处理
        for (PmsProductAttributeCategory pac : pacList) {
            //构建被存入的Dto对象
            //需要向Dto里面封装pac和pa的list
            PmsProductAttributeCategoryDto pacDto = new PmsProductAttributeCategoryDto();
            //拷贝,此时dto中productAttributeList还是空的
            BeanUtils.copyProperties(pac, pacDto);
            //获得每个商品属性分类的id
            long id = pac.getId();
            //需要查询该id对应的pa的集合,并存入Dto中
            //查询的是pmsProductAttribute表,需要该id与pmsProductAttribute中的productAttributeCategoryId相等
            LambdaQueryWrapper<PmsProductAttribute> lqw = new LambdaQueryWrapper<>();
            lqw.eq(PmsProductAttribute::getProductAttributeCategoryId, id);
            List<PmsProductAttribute> paList = pmsProductAttributeMapper.selectList(lqw);
            pacDto.setProductAttributeList(paList);
            //将封装好的Dto存入返回的Dto集合中
            pacDtos.add(pacDto);
        }

        return AjaxResult.success(pacDtos);
    }


    /**
     * 5.修改商品属性分类
     *
     * @param id
     * @param name
     * @return
     */
    @Override
    public AjaxResult updateByIdAndName(Long id, String name) {
        PmsProductAttributeCategory pmsProductAttributeCategory = new PmsProductAttributeCategory();
        pmsProductAttributeCategory.setId(id);
        pmsProductAttributeCategory.setName(name);
        /*LambdaQueryWrapper<PmsProductAttributeCategory> lqw = new LambdaQueryWrapper<>();
        lqw.eq(PmsProductAttributeCategory::getId,id);
        update(pmsProductAttributeCategory,lqw);*/
        updateById(pmsProductAttributeCategory);
        return AjaxResult.success("修改成功");
    }

    /**
     * 6.获取单个商品属性分类信息
     *
     * @param id
     * @return
     */
    @Override
    public AjaxResult findById(Long id) {

        PmsProductAttributeCategory pmsProductAttributeCategory = pmsProductAttributeCategoryMapper.selectById(id);
        return AjaxResult.success(pmsProductAttributeCategory);
        //1111
    }


}
